package com.lqian.p1_concurrent_origin_3;

public class SyncDemo {

    //对象锁 在同一对象之内生效
    //对于普通同步方法，锁是当前实例对象
    public  synchronized void demo(){

    }

    //类级别的锁 SyncDemo.class
    //对于静态同步方法，锁是当前类的Class对象
    public static synchronized void demo3(){

    }
    //对于同步方法块，锁是synchonzied括号里面配置的对象
    //锁的范围不同，可灵活伸缩，只操作可能会出现同步问题的代码
    // 锁 >>>> 互斥  >>> 存在共享资源 >>> 去争夺
    public void demo1(){
        // TODO: 2022/7/8
        synchronized (this){ //对象锁

        }
        // TODO: 2022/7/8
    }
    public void demo11(){
        // TODO: 2022/7/8
        synchronized (SyncDemo.class){//类级别的锁

        }
        // TODO: 2022/7/8
    }

    public static void main(String[] args) {
        SyncDemo syncDemo = new SyncDemo();
        SyncDemo syncDemo1 = new SyncDemo();
        //无法实现两个线程的互斥，这两个实例对象都不一样
//        new Thread(()->{
//            syncDemo.demo();
//        }).start();
//        new Thread(()->{
//            syncDemo1.demo();
//        }).start();

        //如果访问demo3的话，那么下面两个线程会存在互斥
        new Thread(()->{
            syncDemo.demo3();
        }).start();
        new Thread(()->{
            syncDemo1.demo3();
        }).start();


    }

}
